Image Captioning

强化学习实现看图说话

代码

模型 Actor-Critic Sequence Training for Image Captioning

训练数据:微软Common Objects in COntext(coco)

模型如文章封面图,在传统的seq2seq基础上加入了价值模型(Critic)作为强化学习中的baseline。

首先简单介绍下传统seq2seq实现的图片到文字,使用CNN模型作为提取图片高维特征的输入端,将特征向量初始化RNN的Hidden State,以序列的形式生成文字。

本期的强化学习使用的Actor-Critic算法(下面简称AC),许多state-of-the-art模型使用该算法作为基础,比如AlphaGo。

区别于另一种巧妙的强化学习算法Self-Critic,AC需要多实现一个Critic模型。

CNN模型 - Inception V3

RNN模型 - LSTM

Reward(奖励)- Rouge-L

为了在采样中降低出现重复样本的概率,笔者加入了self attention,而没有使用Beam Search。

模型使用蒙特卡洛采样,折扣因子固定为1

模型训练流程

先单独训练Actor模型。 固定住Actor模型参数,用其生成样本作为Critc模型的输入,使Critc和Actor生成样本无限趋近于相等。 最后,每一个迭代分别训练Criric和Actor

代码

Actor模型实现

64~94行:teacher forcing和采样生成word

Self Attention实现

Critic模型实现

输出actor生成文本的评估分值

Rouge-L实现

结果

由于coco数据量太大,训练非常耗时,笔者在耐心耗尽后模型才训练了几个迭代,不过结果差强人意 : )

Captioning - Desk with a computer and a laptop on it.

Captioning - City street filled with lots of tall buildings.

Captioning - Vase with a flower in it sitting on a table.

Captioning - Man wearing a black jacket and a white shirt.

Captioning - Cat is laying on a couch with a stuffed animal.

Nevermore Written by:

步步生姿,空锁满庭花雨。胜将娇花比。